package br.com.ccm.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(schema="geral")
public class Paciente implements Serializable{

	private static final long serialVersionUID = 5431584708949242286L;
	
	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
	@SequenceGenerator(schema = "geral", initialValue = 1, name = "SEQ", sequenceName = "geral.seq_paciente", allocationSize = 1)
	private Long id;
	private String nome;
	private String sobrenome;
	private String cpf;
	private String rg;
	
	@Column(name="data_nascimento") @Temporal(TemporalType.DATE)
	private Date dataNascimento;
	
	@ManyToOne
	@JoinColumn(name="plano_saude_id")
	private PlanoSaude planoSaude = new PlanoSaude();
	
	@OneToOne
	@JoinColumn(name="usuario_id")
	private Usuario usuarioWeb;
	
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "paciente", orphanRemoval = true)
	private List<TelefonePaciente> telefone = new ArrayList<TelefonePaciente>();
	
	@ManyToOne
	@JoinColumn(name="dados_clinicos_id")
	private DadosClinicos dadosClinicos = new DadosClinicos();
	
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="endereco_id")
	private Endereco endereco = new Endereco();
	
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSobrenome() {
		return sobrenome;
	}
	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getRg() {
		return rg;
	}
	public void setRg(String rg) {
		this.rg = rg;
	}
	public Date getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	public PlanoSaude getPlanoSaude() {
		return planoSaude;
	}
	public void setPlanoSaude(PlanoSaude planoSaude) {
		this.planoSaude = planoSaude;
	}
	public Usuario getUsuarioWeb() {
		return usuarioWeb;
	}
	public void setUsuarioWeb(Usuario usuarioWeb) {
		this.usuarioWeb = usuarioWeb;
	}
	public List<TelefonePaciente> getTelefone() {
		return telefone;
	}
	public void setTelefone(List<TelefonePaciente> telefone) {
		this.telefone = telefone;
	}
	public DadosClinicos getDadosClinicos() {
		return dadosClinicos;
	}
	public void setDadosClinicos(DadosClinicos dadosClinicos) {
		this.dadosClinicos = dadosClinicos;
	}
	public Endereco getEndereco() {
		return endereco;
	}
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
}
